package geometry;

import java.util.List;

import foundationgeom.Transformation;
import foundationgeom.Vector;
import graph.GNode;

import javax.media.j3d.Node;

import constraint.Variable;
import constraint.VariableType;

public interface Geometry {

    public String toString();

    public Transformation getTransformation(Geometry geometry);

    public void translateBy(double dx, double dy, double dz);

    public void print();

    public String toVRML();

    public List<Node> getTransormedJava3DBox(float red, float blue, float green,
            float scale);

    public Vector getScale(Geometry geometry);

    public Geometry transform(CoordSys parent, Transform transformation);

    public boolean areEqual(Geometry geometry);

    public void scale(double sx, double sy, double sz);

    public void rotate(double x, double y, double z);

    public Geometry copy(CoordSys parent);

    public boolean intersects(Geometry geometry);

    public CoordSys getCoordSys();

    public void addLabel(String label);

//    public Geometry transformInSiblingCS(Transform transform, Geometry lhsShape);

    public Variable getVariable(VariableType type);
    
    public Variable[] getVariables();

    public GNode transformInSiblingCS(Transform transformation,
            Geometry lhsGeom, Geometry designGeom);
}